
// import fs from 'fs';
import path from 'path';
//ES6模块的加载插件
import { nodeResolve } from '@rollup/plugin-node-resolve';
// es6语法转换插件
import { babel } from '@rollup/plugin-babel';
// CommonJS modules代码转换插件
import commonjs from '@rollup/plugin-commonjs';
// 语法检测插件
import { eslint } from "rollup-plugin-eslint";
// 代码压缩插件
// import { uglify } from 'rollup-plugin-uglify';
import { terser } from 'rollup-plugin-terser';  // 支持e6的压缩工具
// 本地服务
import serve from 'rollup-plugin-serve';
// 热更新
import livereload from 'rollup-plugin-livereload';
// 变量替换
// import replace from '@rollup/plugin-replace';
// 别名插件
import alias from '@rollup/plugin-alias';
// import json from '@rollup/plugin-json';

import pkg from './package.json';

// 包生成时间
const now = new Date(
  process.env.SOURCE_DATE_EPOCH ? process.env.SOURCE_DATE_EPOCH * 1000 : new Date().getTime()
).toUTCString();

// 项目路径
const projectRootDir = path.resolve(__dirname);

const env = process.env.NODE_ENV;

// 别名列表
const moduleAliases = {
  resolve: ['.js', '.json', '.md'],
  entries: [
    { find: 'src', replacement: path.resolve(projectRootDir, 'src') }
  ]
};

const banner = `/*
 * @license
 * h5collector.js 
 * description: ${pkg.description}
 * author: lyz
 * version: ${pkg.version}
 * build time: ${now}
 */`;

const plugins = [
  alias(moduleAliases),
  nodeResolve(),
  commonjs(),
  eslint(),
  // 相关参数说明：https://www.jianshu.com/p/fe3319e0abc4
  babel({
    exclude: "node_modules/**"
  })
  // json()
];

let filename = 'h5collector.js';

if (env === 'prd') {
  // 压缩代码
  plugins.push(terser());
  filename = 'h5collector.min.js';
} else if (env === 'dev') {
  // 开发模式开启热更新与本地服务
  
  // 热更新
  plugins.push(livereload());
  // 本地服务
  plugins.push(serve({
    open: true, // 自动打开页面
    port: 8000, 
    openPage: '/index.html', // 打开的页面
    contentBase: ''
  }));
}

 // rollup配置说明
// https://www.rollupjs.com/guide/big-list-of-options
export default {
  input: pkg.main,
  output: {
    // name:生成包名称
    name: 'H5Collector',
    file: './dist/' + filename,
    // format:生成包的格式
    // amd – 异步模块定义，用于像RequireJS这样的模块加载器
    // cjs – CommonJS，适用于 Node 和 Browserify/Webpack
    // esm – 将软件包保存为 ES 模块文件，在现代浏览器中可以通过 <script type=module> 标签引入
    // iife – 一个自动执行的功能，适合作为<script>标签。（如果要为应用程序创建一个捆绑包，您可能想要使用它，因为它会使文件大小变小。）
    // umd – 通用模块定义，以amd，cjs 和 iife 为一体
    // system - SystemJS 加载器格式
    format: 'umd',
    sourcemap: true,
    banner: banner,
  },
  plugins: plugins
};